﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныеПроцедурыИФункции

// Возвращает кодировку версии файла.
//
// Параметры:
//   ВерсияСсылка - ОпределяемыйТип.ПрисоединенныйФайл - версия файла.
//
// Возвращаемое значение:
//   Строка
//
Функция КодировкаВерсииФайла(ВерсияСсылка) Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	
	МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.Файл = ВерсияСсылка;
	МенеджерЗаписи.Прочитать();
	
	Возврат МенеджерЗаписи.Кодировка;
	
КонецФункции

// Записывает кодировку версии файла.
//
// Параметры:
//   ВерсияСсылка - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на версию файла.
//   Кодировка - Строка - новая кодировка версии файла.
//
Процедура ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт
	
	Если НЕ ЗначениеЗаполнено(Кодировка) Тогда
		Возврат;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ВерсияСсылка)) Тогда
		Возврат;
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	
	МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.Файл = ВерсияСсылка;
	МенеджерЗаписи.Кодировка = Кодировка;
	МенеджерЗаписи.Записать(Истина);
	
КонецПроцедуры

// Автоматически определяет и возвращает кодировку текстового файла.
//
// Параметры:
//  ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл
//  Расширение         - Строка - расширение файла.
//
// Возвращаемое значение:
//  Строка
//
Функция ОпределитьКодировкуФайла(ПрисоединенныйФайл, Расширение) Экспорт
	
	Кодировка = КодировкаВерсииФайла(ПрисоединенныйФайл);
	Если ЗначениеЗаполнено(Кодировка) Тогда
		Возврат Кодировка;
	КонецЕсли;
		
	ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки;
	АвтоопределениеКодировки = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке(
		ОбщиеНастройки.СписокРасширенийТекстовыхФайлов, Расширение);
	Если Не АвтоопределениеКодировки Тогда
		Возврат Кодировка;
	КонецЕсли;
		
	ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(ПрисоединенныйФайл, Ложь);
	Кодировка = РаботаСФайламиСлужебныйКлиентСервер.ОпределитьКодировкуДвоичныхДанных(ДвоичныеДанные, Расширение);
	Возврат Кодировка;
	
КонецФункции

#КонецОбласти

#КонецЕсли
